package OptimalManyServices;

import chapter02.MyUtil;

import java.io.*;
import java.util.Arrays;
import java.util.Scanner;

public class test3 {
    public  static double service(int[] a, int n, int s){
        Arrays.sort(a);
        int[] count = new int[s+1];//排队顾客人数
        double t=0;
        for(int i = 1;i<=s;i++) {
            count[i] = a[i];
            t+=a[i];
        }
        //剩余顾客进行排列
        int flag = 0;
        for(int i = s+1;i<=n;i++) {

            flag = min(count,s);//找到最快轮到的服务点
            count[flag]+=a[i];
            t+=count[flag];//次序不可颠倒，自身服务时间也算
        }
        return t/n;
    }
    //找到数组中的最小值所在的下标
    public  static int min(int[] array,int n){
        int value = array[1];
        int flag = 1;
        for(int i = 2;i<=n;i++) {
            if(array[i]<value) {
                value = array[i];
                flag = i;
            }
        }
        return flag;
    }

    public static void main(String[] args) throws IOException {
        FileInputStream fileInputStream = new FileInputStream("src\\OptimalManyServices\\test\\waits0.in");
        Scanner scanner =new Scanner(fileInputStream);
        /**
         * 第一行有2个正整数n和s，表示有个顾客且有s处可以提供顾客需要的服务。
         * 接下来的1行中，有n个正整数，表示n个顾客需要的服务时间。
         */
        int n=scanner.nextInt();
        int s=scanner.nextInt();
        System.out.println(n);
        System.out.println(s);
        int[] a=new int[n+1];
        for (int i = 1; i <=n ; i++) {
            a[i]=scanner.nextInt();
        }
        MyUtil.printA(a,1);
        System.out.println(service(a,n,s));
//        File f=new File("src\\OptimalManyServices\\answer\\waits0.out");
//        f.createNewFile();
//        FileOutputStream fileOutputStream = new FileOutputStream(f);
//        PrintStream printStream = new PrintStream(fileOutputStream);
//        System.setOut(printStream);
//
//        printStream.close();
//        fileOutputStream.close();

    }
}
